#ifndef CHAT_H
#define CHAT_H

#include <QWidget>
#include "../contacts/itembutton.h"
#include <QVBoxLayout>
#include "rightchatclass.h"
#include <QListWidget>
#include <QListWidgetItem>
#include "chattext.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Chat; }
QT_END_NAMESPACE

struct eachChatMsgStruct{
    int msgType;//消息类型，0表示我说的，1表示对方说的，2表示系统消息
    int uid;//该条消息的发送者
    QString content;
};

class Chat : public QWidget
{
    Q_OBJECT
public:
    Chat(QWidget *parent = nullptr);


public:
    void styleSelf();
    ItemButton* addLeftScrollItem(responseUserInfo userProfile, QString unreadNumStr);//新增一个左侧scroll的Item
    void addOneChatItem(int uid, ItemButton* item);//新增一个左侧scroll的uid，用来做索引
    bool isExistItem(int uid);//判断该聊天item是否存在
    void refreshItemUnreadNum(int uid, QString numStr);//更新该item的未读数

    void drawChatBanner(QString nickname);//画右侧聊天的banner
    void drawChatScroll();//画右侧scroll包含聊天记录
//    void drawChatListWidget();//画右侧listwidget，包含聊天记录
    void drawChatMenu();//画右侧聊天菜单
    void drawChatTextarea();//画右侧聊天输入框
    void sendMsg(QString content);//发送消息
    void chatListHistoryDemo();
    void initChatList();
    void addMyChat(QString content, bool recordData);//新增一个我发送的消息
    void refreshUserChatHistory();
    void addPairChat(int uid, QString content, bool recordData);//新增一个对方发送的消息
    /**
     * @brief 设置chat页面被选中的item
     * @param item
     */
    void setCurrentClickedItem(ItemButton* item);
    ItemButton* getCurrentClickedItem();
    /**
     * @brief chat页面itembutton被点击时的事件
     * @param item
     */
    void clickItemButtonEventForChatPage(ItemButton* item);

    /**
     * @brief 聊天回调
     */
    void apiChatCallback(int code, QString msg);

    /**
     * @brief 新增未读数量
     * @param uid
     * @param num
     */
    void addUnreadNum(int uid, int num);

    /**
     * @brief 清除某个聊天的未读数量
     * @param uid
     */
    void clearUnreadNum(int uid);

    /**
     * @brief 获取某个用户的未读数
     * @param uid
     */
    QString getUnreadNumByUidStr(int uid);

    /**
     * @brief 获取未读总数
     */
    QString getAllUnreadTotalNumStr();


public:
    static const int MSG_TYPE_MY = 1;//我说的消息
    static const int MSG_TYPE_PAIR = 2;//对方说的
    static const int MSG_TYPE_SYS = 3;//系统消息

private:
    Ui::Chat *ui;
    QVBoxLayout* scrollLayout = new QVBoxLayout();

    //右侧
    QLabel *chatBanner = new QLabel(this);
    QLabel *chatMenu = new QLabel(this);
    ChatText *chatEdit = new ChatText(this);
    QVBoxLayout* chatListLayout = new QVBoxLayout(this);

    //聊天记录map，uid作为key，content作为value
    QMap<int, QVector<eachChatMsgStruct>> userChatHistory;
    //左侧当前聊天人员的map，uid作为Key, item指针作为value
    QMap<int, ItemButton*> userChatList;
    //未读消息数量，key为uid，value为当前数量
    QMap<int, int> userChatUnreadNumMap;
    //当前聊天框选中的用户对象
    ItemButton* currentClickedItem = nullptr;
};

#endif // CHAT_H
